import dynamic from 'next/dynamic'
import NextImage from 'next/image';
import { useEffect, useState } from 'react'
import { useRouter } from 'next/router'
import Seo from '../../../core/components/Seo.jsx'
import Promocrumb from '../../../lib/promo/components/Promocrumb.jsx'
import LogoSpinner from '../../../core/components/elements/Spinner/LogoSpinner.jsx'
import ProductPromoCard from '../../../../src-migrate/modules/product-promo/components/Card.tsx'
import React from 'react'
import DesktopView from '../../../core/components/views/DesktopView.jsx';
import MobileView from '../../../core/components/views/MobileView.jsx';
import 'swiper/swiper-bundle.css';
import useDevice from '../../../core/hooks/useDevice.js'
import ProductFilterDesktop from '../../../lib/product/components/ProductFilterDesktopPromotion.jsx';
import ProductFilter from '../../../lib/product/components/ProductFilter.jsx';
import { HStack, Image, Tag, TagCloseButton, TagLabel } from '@chakra-ui/react';
import { formatCurrency } from '../../../core/utils/formatValue.js';
import Pagination from '../../../core/components/elements/Pagination/Pagination.js';
import whatsappUrl from '../../../core/utils/whatsappUrl.js';
import _ from 'lodash';
import useActive from '../../../core/hooks/useActive.js';
import useProductSearch from '../../../lib/promo/hooks/usePromotionSearch.js';
const BasicLayout = dynamic(() => import('../../../core/components/layouts/BasicLayout.jsx'))
export default function PromoDetail() {
const router = useRouter()
const { slug = '', brand ='', category='', page = '1' } = router.query
const [currentPage, setCurrentPage] = useState(parseInt(10) || 1);
const [orderBy, setOrderBy] = useState(router.query?.orderBy);
const popup = useActive();
const prefixUrl = `/shop/promo/${slug}`
const [queryFinal, setQueryFinal] = useState({});
const [limit, setLimit] = useState(30);
const [q, setQ] = useState('*');
const [finalQuery, setFinalQuery] = useState({});
const [products, setProducts] = useState(null);
const [brandValues, setBrand] = useState(
!router.pathname.includes('brands')
? router.query.brand
? router.query.brand.split(',')
: []
: []
);
const [categoryValues, setCategory] = useState(
router.query?.category?.split(',') || router.query?.category?.split(',')
);
const [priceFrom, setPriceFrom] = useState(router.query?.priceFrom || null);
const [priceTo, setPriceTo] = useState(router.query?.priceTo || null);
useEffect(() => {
const newQuery = {
fq: `type_value_s:${slug}`,
page : router.query.page? router.query.page : 1,
brand : router.query.brand? router.query.brand : '',
category : router.query.category? router.query.category : '',
priceFrom : router.query.priceFrom? router.query.priceFrom : '',
priceTo : router.query.priceTo? router.query.priceTo : '',
limit : router.query.limit? router.query.limit : '',
orderBy : router.query.orderBy? router.query.orderBy : ''
};
setFinalQuery(newQuery);
}, [router.query, prefixUrl, slug, brand, category, priceFrom, priceTo, currentPage]);
useEffect(() => {
setQueryFinal({ ...finalQuery, q, limit, orderBy });
}, [router.query, prefixUrl, slug, brand, category, priceFrom, priceTo, currentPage, finalQuery]);
const { productSearch } = useProductSearch({
query: queryFinal,
operation: 'OR',
});
const pageCount = Math.ceil(productSearch.data?.response.numFound / limit);
const productStart = productSearch.data?.responseHeader.params.start;
const productRows = limit;
const productFound = productSearch.data?.response.numFound;
useEffect(() => {
setProducts(productSearch.data?.response?.products);
}, [productSearch]);
const brands = [];
for (
let i = 0;
i < productSearch.data?.facet_counts?.facet_fields?.manufacture_name_s.length;
i += 2
) {
const brand =
productSearch.data?.facet_counts?.facet_fields?.manufacture_name_s[i];
const qty =
productSearch.data?.facet_counts?.facet_fields?.manufacture_name_s[i + 1];
if (qty > 0) {
brands.push({ brand, qty });
}
}
const categories = [];
for (
let i = 0;
i < productSearch.data?.facet_counts?.facet_fields?.category_name.length;
i += 2
) {
const name = productSearch.data?.facet_counts?.facet_fields?.category_name[i];
const qty =
productSearch.data?.facet_counts?.facet_fields?.category_name[i + 1];
if (qty > 0) {
categories.push({ name, qty });
}
}
function capitalizeFirstLetter(string) {
string = string.replace(/_/g, ' ');
return string.replace(/(^\w|\s\w)/g, function(match) {
return match.toUpperCase();
});
}
const handleDeleteFilter = async (source, value) => {
let params = {
q: router.query.q,
orderBy: '',
brand: brandValues.join(','),
category: categoryValues?.join(','),
priceFrom: priceFrom || '',
priceTo: priceTo || '',
};
let brands = brandValues;
let catagories = categoryValues;
switch (source) {
case 'brands':
brands = brandValues.filter((item) => item !== value);
params.brand = brands.join(',');
await setBrandValues(brands);
break;
case 'category':
catagories = categoryValues.filter((item) => item !== value);
params.category = catagories.join(',');
await setCategoryValues(catagories);
break;
case 'price':
params.priceFrom = '';
params.priceTo = '';
break;
case 'delete':
params = {
q: router.query.q,
orderBy: '',
brand: '',
category: '',
priceFrom: '',
priceTo: '',
};
break;
}
handleSubmitFilter(params);
};
const handleSubmitFilter = (params) => {
params = _.pickBy(params, _.identity);
params = toQuery(params);
router.push(`${slug}?${params}`);
};
const toQuery = (obj) => {
const str = Object.keys(obj)
.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`)
.join('&')
return str
}
const whatPromo = capitalizeFirstLetter(slug)
const queryWithoutSlug = _.omit(router.query, ['slug'])
return (
Belum ada promo pada kategori iniPromo {whatPromo}
Promo {whatPromo}